package arithmetic;

import java.util.Scanner;

/**
 * 知识点：
 * 1.Math.pow
 * 2.int数据的范围-2^31~2^31-1
 * 描述
 * 输入一个 int 型的正整数，计算出该 int 型数据在内存中存储时 1 的个数。
 *
 * 数据范围：保证在 32 位整型数字范围内
 * 输入描述：
 *  输入一个整数（int类型）
 *
 * 输出描述：
 *  这个数转换成2进制后，输出1的个数
 *
 * 示例1
 * 输入：
 * 5
 * 复制
 * 输出：
 * 2
 * 复制
 * 示例2
 * 输入：
 * 0
 * 复制
 * 输出：
 * 0
 */
public class TestHW15 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        // while (in.hasNextInt()) { // 注意 while 处理多个 case
        //     int a = in.nextInt();
        //     int b = in.nextInt();
        //     System.out.println(a + b);
        // }

        try{
            int num = in.nextInt();
            if(num<0) return;
            int result = test(num);
            System.out.println(result);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public static int test(int num){
        int n1 = 0;
        int sum = 0;

        while(true){
            long num1 = (long)Math.pow(2, n1);
            if(num == 0){
                break;
            }
            if(num == num1){
                sum+=1;
                break;
            }
            if(num > num1){
                n1+=1;
            }
            if(num < num1){
                sum+=1;
                num -= (int)Math.pow(2, n1-1);
                n1 = 0;
            }
        }
        return sum;
    }
}
